[web] KATLAS server

MDA deployment process

SSH

  • Staging

    • rosrlkatlas1.mdanderson.edu

    • 10.68.4.119

  • Production

    • roprlkatlas1.mdanderson.edu

    • 10.68.3.119

To connect

ssh 10.68.4.119  # staging
ssh 10.68.3.119  # production

Service Unit

vim /etc/systemd/system/fasthtml.service with:

[Unit]
Description=FastHTML KATLAS Application
After=network.target
OnFailure=fasthtml-alert@%n.service

[Service]
Type=simple
User=icai
WorkingDirectory=/home/icai/katlas-web
ExecStart=/usr/local/bin/uv run uvicorn main:app --host 127.0.0.1 --port 8000 --workers 6
Environment=UV_PROJECT_ENV=1
LimitNOFILE=65535
ExecStopPost=/usr/local/bin/fasthtml_alert.sh
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

第一次新建enable它

sudo systemctl daemon-reload
sudo systemctl enable --now fasthtml
sudo systemctl start fasthtml

修改之后 reload

sudo systemctl daemon-reload
sudo systemctl enable --now fasthtml
sudo systemctl start fasthtml

查看status

sudo systemctl status fasthtml

查看日志

sudo journalctl -u fasthtml -f

查看网络是否accessible (127.0.0.1和 0.0.0.0 的任何人访问不同,类似 local host,只能本地访问,所以只能用 curl,网页的话不会显示。想要chrome 网页显示,用 0000)

curl http://127.0.0.1:8000

Nginx

把port push到域名上

Enable Nginx

sudo yum install nginx -y 
sudo systemctl enable nginx 
sudo systemctl start nginx

Change nginx file

sudo vim /etc/nginx/conf.d/fasthtml.conf
server {
    listen 80;
    server_name katlas.mdanderson.org;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name Katlas.mdanderson.org;

    ssl_certificate /etc/nginx/ssl/katlas_cert.pem;
    ssl_certificate_key /etc/nginx/ssl/Katlas.key;
   #  ssl_trusted_certificate /etc/nginx/ssl/katlas_chain.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

重启nginx

sudo nginx -t
sudo systemctl restart nginx

设置firewall

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

HTTPS

用production server 生成CSR

openssl req -new -newkey rsa:2048 -nodes -keyout Katlas.key -out Katlas.csr

填入信息

Country Name (2 letter code) [XX]: US
State or Province Name (full name) [Default]: Texas
Locality Name (e.g., city) [Default]: Houston
Organization Name (e.g., company) [Default]: MD Anderson
Organizational Unit Name (e.g., department) [Default]: IT
Common Name (e.g., your domain) [Default]: Katlas.mdanderson.org
Email Address [Default]: your-email@example.com

会有一个.csr 和 .key文件。

打开本机的 terminal(不是 ssh上),scp这两个文件到local

scp username@your-server-ip:/path/to/Katlas.csr ~/Downloads

提交csr文件到IT,获得一些certificates,下载Certificate (w/ issuer after)

check .key秘钥和certificate是否match

openssl x509 -noout -modulus -in org.pem| openssl md5
openssl rsa -noout -modulus -in Katlas.key | openssl md5

之后scp certificate 到 user@ip_server,这里是

scp katlas_mdanderson_org.pem icai@10.68.3.119:katlas_cert.pem   

创建装它们的文件夹

sudo mkdir -p /etc/nginx/ssl
sudo mv katlas_cert.pem /etc/nginx/ssl/
sudo mv Katlas.key /etc/nginx/ssl/

如果后面报错,也有可能文件权限没给全

ls -l /etc/nginx/ssl/Katlas.key
sudo chown root:nginx /etc/nginx/ssl/Katlas.key
sudo chmod 640 /etc/nginx/ssl/Katlas.key

然后sudo nano /etc/nginx/conf.d/fasthtml.conf

server {
    listen 80;
    server_name katlas.mdanderson.org;
    return 301 https://$host$request_uri;  # Redirect HTTP to HTTPS
}

server {
    listen 443 ssl;
    server_name katlas.mdanderson.org;

    ssl_certificate /etc/nginx/ssl/katlas_cert.pem;
    ssl_certificate_key /etc/nginx/ssl/Katlas.key;
    # ssl_trusted_certificate /etc/nginx/ssl/katlas_chain.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重启

sudo nginx -t
sudo systemctl restart nginx

设置firewall

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

最后查看

curl https://katlas.mdanderson.org

每年certificate更新,都需要重新设置。

日志查询

# 1. 实时看 nginx 错误
sudo tail -f /var/log/nginx/error.log

# 2. 实时看访问
sudo tail -f /var/log/nginx/access.log

# 3. 看 FastHTML 后端
sudo journalctl -u fasthtml -f

# 4. TLS 验证
curl -Iv https://webaddress.org