diff --git a/m-labs-intl/m-labs-intl.com b/m-labs-intl/m-labs-intl.com new file mode 100644 index 0000000..b0373e5 --- /dev/null +++ b/m-labs-intl/m-labs-intl.com @@ -0,0 +1,60 @@ +upstream rfq_server { + server 127.0.0.1:5000; +} + +server { + root /var/www/m-labs-intl.com/html; + index index.html index.htm index.nginx-debian.html; + + server_name m-labs-intl.com www.m-labs-intl.com; + + location / { + try_files $uri $uri/ =404; + } + + listen [::]:443 ssl ipv6only=on; # managed by Certbot + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/m-labs-intl.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/m-labs-intl.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +server { + server_name hooks.m-labs-intl.com; + + location /rfq { + proxy_pass http://rfq_server/rfq; + 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; + proxy_read_timeout 30; + proxy_connect_timeout 30; + proxy_send_timeout 30; + } + + location / { + return 404; + } + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/m-labs-intl.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/m-labs-intl.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +server { + if ($host = www.m-labs-intl.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + listen [::]:80; + + server_name m-labs-intl.com www.m-labs-intl.com; + return 301 https://$host$request_uri; + #return 404; # managed by Certbot +} \ No newline at end of file diff --git a/m-labs-intl/mail.secret b/m-labs-intl/mail.secret new file mode 100644 index 0000000..e69de29 diff --git a/m-labs-intl/nginx.conf b/m-labs-intl/nginx.conf new file mode 100644 index 0000000..4fd4ee0 --- /dev/null +++ b/m-labs-intl/nginx.conf @@ -0,0 +1,142 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +error_log /var/log/nginx/error.log; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + types_hash_max_size 2048; + # server_tokens off; + + server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} + + +stream { + # Upstream mail servers + upstream smtp_backend { + server mail.m-labs.hk:25; + } + + upstream pop3_backend { + server mail.m-labs.hk:110; + } + + upstream imap_backend { + server mail.m-labs.hk:143; + } + + upstream smtps_backend { + server mail.m-labs.hk:465; + } + + upstream submission_backend { + server mail.m-labs.hk:587; + } + + upstream imaps_backend { + server mail.m-labs.hk:993; + } + + upstream pop3s_backend { + server mail.m-labs.hk:995; + } + + # SMTP + server { + listen 25; + proxy_pass smtp_backend; + proxy_protocol on; + } + + # POP3 + server { + listen 110; + proxy_pass pop3_backend; + proxy_protocol on; + } + + # IMAP + server { + listen 143; + proxy_pass imap_backend; + proxy_protocol on; + } + + # SMTPS (Secure SMTP) + server { + listen 465; + proxy_pass smtps_backend; + proxy_protocol on; + } + + # Submission (Authenticated SMTP) + server { + listen 587; + proxy_pass submission_backend; + proxy_protocol on; + } + + # IMAPS (Secure IMAP) + server { + listen 993; + proxy_pass imaps_backend; + proxy_protocol on; + } + + # POP3S (Secure POP3) + server { + listen 995; + proxy_pass pop3s_backend; + proxy_protocol on; + } +} diff --git a/m-labs-intl/rfq.service b/m-labs-intl/rfq.service new file mode 100644 index 0000000..79b6858 --- /dev/null +++ b/m-labs-intl/rfq.service @@ -0,0 +1,12 @@ +[Unit] +Description=RFQ service +After=network.target + +[Service] +Type=simple +User=rfqserver +ExecStart=/home/rfqserver/runrfq.sh +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/m-labs-intl/runrfq.sh b/m-labs-intl/runrfq.sh new file mode 100644 index 0000000..c728d38 --- /dev/null +++ b/m-labs-intl/runrfq.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +export FLASK_DEBUG=0 +export FLASK_MAIL_SERVER=mail.m-labs.hk +export FLASK_MAIL_PORT=465 +export FLASK_MAIL_USE_SSL=True +export FLASK_MAIL_USERNAME=sysop-intl@m-labs-intl.com +export FLASK_MAIL_PASSWORD_FILE=/home/rfqserver/mail.secret +export FLASK_MAIL_RECIPIENT=sales@m-labs.hk +export FLASK_MAIL_SENDER=sysop-intl@m-labs-intl.com + +cd /home/rfqserver/web2019/server +source venv/bin/activate +python3 -m flask --app rfq run --port=5000 \ No newline at end of file diff --git a/m-labs-intl/setup.sh b/m-labs-intl/setup.sh new file mode 100644 index 0000000..1ab58f2 --- /dev/null +++ b/m-labs-intl/setup.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +apt install git nginx-full python3 python3.12-venv python3-pip +snap install --classic certbot +ln -s /snap/bin/certbot /usr/bin/certbot +useradd -m rfqserver +useradd -m zolaupd + +cp m-labs-intl.com /etc/nginx/sites-available/ +cp nginx.conf /etc/nginx/ +ln -s /etc/nginx/sites-available/m-labs-intl.com /etc/nginx/sites-enabled/ + +mkdir -p /var/www/m-labs-intl.com/html +chown -R zolaupd /var/www/m-labs-intl.com/ + +cp runrfq.sh /home/rfqserver/ +cp mail.secret /home/rfqserver/ +chown rfqserver /home/rfqserver/runrfq.sh +chmod +x /home/rfqserver/runrfq.sh +chown rfqserver /home/rfqserver/mail.secret + + +sudo -u zolaupd sh -c ' + cd /home/zolaupd; + mkdir /home/zolaupd/.ssh; + echo -n "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP1OJJM8g/1ffxDjN31XKEfGmrYaW03lwpyTa1UGWqVx + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF6R6XK0IiuAKxVKvSABm4m9bfOlvfJcMvTpjenuXUPv" > /home/zolaupd/.ssh/authorized_keys + chmod 700 .ssh/ + chmod 600 .ssh/authorized_keys + ' + +sudo -u rfqserver sh -c ' + cd /home/rfqserver; + git clone https://git.m-labs.hk/M-Labs/web2019.git; + cd web2019; + python3 -m venv ./venv; + source venv/bin/activate; + pip install -r requirements.txt; +' + +cp rfq.service /etc/systemd/system/ + +systemctl daemon-reload +systemctl enable rfq.service +systemctl start rfq.service + +service nginx restart + +certbot --nginx + +service nginx restart