வரிசைப்படுத்தல்

இந்த பக்கம் உங்கள் சர்வரில் என்ன நிறுவ வேண்டும் என்பதை விவரிக்கிறது.

விண்ணப்ப பணி

Canaille installation முடிந்ததும் நீங்கள் அதை WSGI அப்ளிகேசன் சர்வரில் இயக்க வேண்டும். Gunicorn, uWSGI, uvicorn அல்லது Hypercorn போன்ற பல பயன்பாட்டுச் சேவையகங்கள் உள்ளன.

Canaille ஒரு ஒளி Hypercorn ஒருங்கிணைப்புடன் வருகிறது ஆனால் நீங்கள் அதை எந்த பயன்பாட்டு சேவையகத்திலும் பயன்படுத்தலாம். உங்கள் விருப்ப சர்வரில் உள்ளமைக்க WSGI நுழைவுப் புள்ளி canaille:create_app ஆகும்.

ஐபர்கார்ன் ஒருங்கிணைப்பு

ஒருங்கிணைந்த Hypercorn பயன்பாட்டு சேவையகத்தை இயக்க, நீங்கள் canaille run கட்டளையை இயக்கலாம். ஐப்பர்கார்ன் ஒருங்கிணைப்பு கேனைல் பைனரிகளில் உட்பொதிக்கப்பட்டுள்ளது. இருப்பினும் நீங்கள் Canaille பைதான் தொகுப்பைப் பயன்படுத்தினால், உங்களுக்கு [server] கூடுதல் தேவைப்படும் (உதாரணமாக, Hypercorn கிடைக்க pip install canaille[server].

Canaille ரன் கட்டளையை இயக்குகிறது
$ canaille run
[2025-01-02 16:39:18 +0100] [304043] [INFO] Running on http://0.0.0.0:8000 (CTRL + C to quit)
[2025-01-02 16:39:18,412] INFO in logging: Running on http://0.0.0.0:8000 (CTRL + C to quit)

இயல்பாக, இது உள்ளக ஓச்டின் 8000 போர்ட்டில் இயங்குகிறது, இது போதுமானதாக இருக்கலாம் ஆனால் நீங்கள் அதை இன்னும் கொஞ்சம் தனிப்பயனாக்க விரும்பலாம். அதிர்ச்டவசமாக Hypercorn உங்கள் தேவைகளுக்கு ஏற்ப அதை சரிசெய்ய configuration ஆவணப்படுத்துதல் வழங்குகிறது. நீங்கள் ஐப்பர்கார்னை முதன்மையான கேனயில் உள்ளமைவு கோப்பில் மாற்றலாம், CANAILLE_HYPERCORN namespace, அல்லது CLI அளவுருக்களைக் கடந்து.

அளவுருக்களுடன் Canaille ரன் கட்டளையை இயக்குகிறது
$ canaille run --bind 0.0.0.0:1234 --workers 4

பதிலாள் கட்டமைப்பு

Nginx அல்லது Caddy போன்ற தலைகீழ் ப்ராக்சிக்குப் பின்னால் Canaille ஐ இயக்கும் போது, முன்னனுப்பப்பட்ட தலைப்புகளை சரியாகக் கையாளும் வகையில் அமைப்பை உள்ளமைக்க வேண்டும். CANAILLE_HYPERCORN__PROXY_MODE env var உடன், அல்லது PROXY_MODE உடன் உள்ளமைவு அமைப்பை `[PERCORN_HY` என்ற பெயரில், மதிப்பை அமைக்கவும். பாரம்பரிய ``எக்ச்-ஃபார்வர்டு-* தலைப்புகளுக்கான லெகசி (மிகவும் பொதுவானது), அல்லது RFC 7239 ஃபார்வர்டு தலைப்புகளுக்கான நவீன. கிளையன்ட் மற்றும் உங்கள் பயன்பாட்டிற்கு இடையே உள்ள நம்பகமான ப்ராக்சிகளின் எண்ணிக்கையை பொருத்துவதற்கு PROXY_MODE ஐயும் சரிசெய்யலாம் (இயல்புநிலை 1 க்கு).

வெப்சர்வர்

இப்போது நீங்கள் உங்கள் WSGI பயன்பாட்டு சேவையகத்தை உங்கள் வெப்சர்வரில் இணைக்க வேண்டும், எனவே அதை இணையத்தில் அணுக முடியும். நீங்கள் எடுக்கக்கூடிய சில வெப்சர்வர் உள்ளமைவு எடுத்துக்காட்டுகள் இங்கே:

Nginx

Canaille க்கான Nginx உள்ளமைவு எடுத்துக்காட்டு
server {
    listen 80;
    listen [::]:80;
    server_name auth.mydomain.example;
    return 301 https://$server_name$request_uri;
}

server {
    server_name auth.mydomain.example;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/auth.mydomain.example/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.mydomain.example/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;

    index index.html index.php;
    charset utf-8;
    client_max_body_size 10M;

    access_log /opt/canaille/logs/nginx.access.log;
    error_log /opt/canaille/logs/nginx.error.log;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options                      "SAMEORIGIN"    always;
    add_header X-Content-Type-Options               "nosniff"       always;
    add_header Referrer-Policy                      "same-origin"   always;

    location /static {
        root /opt/canaille/src/canaille;

        location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {
            access_log off;
            expires 30d;
            more_set_headers Cache-Control public;
        }
    }

    location / {
        proxy_pass http://unix:/run/canaille.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

அப்பாச்சி

Canaille க்கான அப்பாச்சி உள்ளமைவு சான்று
<VirtualHost *:80>
    ServerName auth.mydomain.example
    ServerAdmin admin@mydomain.example

    CustomLog /opt/canaille/logs/apache-http-access.log combined
    ErrorLog /opt/canaille/logs/apache-http-error.log

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]    </VirtualHost>
</VirtualHost>

<VirtualHost *:443>
    ServerName auth.mydomain.example
    ServerAdmin admin@mydomain.example
    Protocols h2 http/1.1

    CustomLog /opt/canaille/logs/apache-https-access.log combined
    ErrorLog /opt/canaille/logs/apache-https-error.log

    SSLEngine On
    SSLCertificateFile      /etc/letsencrypt/live/auth.mydomain.example/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/auth.mydomain.example/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    ProxyPreserveHost On
    ProxyPass /static/ !
    ProxyPass / unix:/run/canaille.sock
    ProxyPassReverse / unix:/run/canaille.sock

    RequestHeader set X-FORWARDED-PROTOCOL ssl
    RequestHeader set X-FORWARDED-SSL on
</VirtualHost>

தொடர்ச்சியான வேலைகள்

உங்கள் தரவுத்தளமானது அதிகமாக வளர்வதைத் தவிர்க்க நீங்கள் அதை தூய்மை செய்ய விரும்பலாம். காலாவதியான டோக்கன்கள் மற்றும் அங்கீகாரக் குறியீடுகளை நீங்கள் தொடர்ந்து நீக்கலாம்:

$ env CANAILLE_CONFIG="$CANAILLE_CONF_DIR/config.toml" FLASK_APP=canaille "$CANAILLE_INSTALL_DIR/env/bin/canaille" clean

வலைவிரல்

உங்கள் பயனர்களில் ஒருவரின் கணக்குப் பெயரின் அடிப்படையில் உங்கள் Canaille நிறுவலைத் தானாகக் கண்டறிய அனுமதிக்க, உங்கள் முதன்மையான இணையதளத்தில் WebFinger இறுதிப் புள்ளியை உள்ளமைக்க நீங்கள் விரும்பலாம். உதாரணமாக, உங்கள் டொமைன் mydomain.example என்றும், உங்கள் Canaille டொமைன் auth.mydomain.example என்றும், john.doe என்ற பயனர் இருக்கிறார் என்றும் வைத்துக்கொள்வோம். மூன்றாம் தரப்பு பயன்பாட்டிற்கு பயனரை அங்கீகரித்து, அவர்களிடம் பயனர் கணக்கைக் கேட்க வேண்டும். பயனர் தனது கணக்கை john.doe@mydomain.example வழங்குவார், பின்னர் பயன்பாடு WebFinger கோரிக்கையை https://mydomain.example/.well-known/webfinger இல் செயல்படுத்தும் மற்றும் பதிலில் அங்கீகார சேவையகத்தின் முகவரி ``https://auth.mydomain.example` இருக்கும். இந்தத் தகவலுடன் மூன்றாம் தரப்பு பயன்பாடு பயனரை Canaille அங்கீகரிப்புப் பக்கத்திற்குத் திருப்பிவிடலாம்.

இங்கு உள்ள தொல்லை என்னவென்றால், WebFinger எண்ட்பாயிண்ட் உயர்நிலை டொமைனில் (அதாவது mydomain.example) புரவலன் செய்யப்பட வேண்டும், அதே நேரத்தில் அங்கீகார சேவையகம் ஒரு துணை நிலையில் புரவலன் செய்யப்படலாம் (அதாவது auth.mydomain.example). Canaille ஒரு WebFinger இறுதிப்புள்ளியை வழங்குகிறது, ஆனால் அது உயர்மட்ட டொமைனில் புரவலன் செய்யப்படவில்லை என்றால், /.well-known/webfinger பாதையில் ஒரு வலைத் திசைமாற்றம் தேவைப்படுகிறது.

Nginx அல்லது Apache க்கான உள்ளமைவு எடுத்துக்காட்டுகள் இங்கே:

உயர்மட்ட டொமைனுக்கான Nginx webfinger உள்ளமைவு
 server {
     listen 443;
     server_name mydomain.example;
     rewrite  ^/.well-known/webfinger https://auth.mydomain.example/.well-known/webfinger permanent;
 }
மேல் நிலை டொமைனுக்கான அப்பாச்சி வெப்ஃபிங்கர் உள்ளமைவு
 <VirtualHost *:443>
     ServerName mydomain.example
     RewriteEngine on
     RewriteRule "^/.well-known/webfinger" "https://auth.mydomain.example/.well-known/webfinger" [R,L]
 </VirtualHost>