mirror of
https://github.com/dragonlock2/matthewtran.com.git
synced 2025-10-11 20:17:54 +00:00
(untested) make nginx run as non-root
This commit is contained in:
parent
dd072e76d8
commit
36c4019c01
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,7 +3,7 @@ __pycache__
|
|||||||
|
|
||||||
# website
|
# website
|
||||||
website/gitea
|
website/gitea
|
||||||
website/letsencrypt
|
website/certbot
|
||||||
website/sendgrid.key
|
website/sendgrid.key
|
||||||
|
|
||||||
# monerod
|
# monerod
|
||||||
|
10
compose.yml
10
compose.yml
@ -21,18 +21,16 @@ services:
|
|||||||
website:
|
website:
|
||||||
restart: always
|
restart: always
|
||||||
build: website/.
|
build: website/.
|
||||||
entrypoint: ["/bin/sh", "/root/entry.sh"]
|
entrypoint: ["/bin/sh", "/home/ubuntu/entry.sh"]
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:8080"
|
||||||
- "443:443"
|
- "443:8443"
|
||||||
networks:
|
networks:
|
||||||
- web
|
- web
|
||||||
volumes:
|
volumes:
|
||||||
- ./website/letsencrypt:/etc/letsencrypt
|
- ./website/certbot:/home/ubuntu/certbot
|
||||||
cap_drop:
|
cap_drop:
|
||||||
- ALL
|
- ALL
|
||||||
cap_add:
|
|
||||||
- NET_BIND_SERVICE
|
|
||||||
gitea:
|
gitea:
|
||||||
restart: always
|
restart: always
|
||||||
image: gitea/gitea:latest-rootless
|
image: gitea/gitea:latest-rootless
|
||||||
|
@ -9,6 +9,6 @@ if __name__ == "__main__":
|
|||||||
"terraria/worlds",
|
"terraria/worlds",
|
||||||
"terraria/password.txt",
|
"terraria/password.txt",
|
||||||
"website/gitea",
|
"website/gitea",
|
||||||
"website/letsencrypt",
|
"website/certbot",
|
||||||
"website/sendgrid.key",
|
"website/sendgrid.key",
|
||||||
], check=True)
|
], check=True)
|
||||||
|
@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# create folders with same UID/GID as user so containers have access
|
# create folders with same UID/GID as user so containers have access
|
||||||
PATHS = [
|
PATHS = [
|
||||||
"website/letsencrypt",
|
"website/certbot",
|
||||||
"website/gitea/config",
|
"website/gitea/config",
|
||||||
"website/gitea/data",
|
"website/gitea/data",
|
||||||
"monerod/.bitmonero",
|
"monerod/.bitmonero",
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
gitea
|
gitea
|
||||||
letsencrypt
|
certbot
|
||||||
|
@ -5,18 +5,14 @@ ENV TZ=America/Los_Angeles
|
|||||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y upgrade
|
RUN apt-get update && apt-get -y upgrade
|
||||||
RUN apt-get install -y nginx certbot python3-certbot-nginx python3-pip
|
RUN apt-get install -y nginx certbot python3-pip
|
||||||
RUN pip3 install sendgrid --break-system-packages
|
RUN pip3 install sendgrid --break-system-packages
|
||||||
|
|
||||||
RUN rm /etc/nginx/sites-enabled/default
|
USER ubuntu
|
||||||
|
WORKDIR /home/ubuntu
|
||||||
|
RUN mkdir nginx certbot
|
||||||
|
|
||||||
# enable site
|
|
||||||
# TODO make the website code not terrible ;-;
|
# TODO make the website code not terrible ;-;
|
||||||
COPY matthewtran.com /etc/nginx/sites-available
|
COPY --chown=ubuntu:ubuntu html ./html
|
||||||
RUN ln -s /etc/nginx/sites-available/matthewtran.com /etc/nginx/sites-enabled/matthewtran.com
|
COPY --chown=ubuntu:ubuntu sendgrid.ke[y] ip_update.py ./
|
||||||
COPY html /var/www/matthewtran.com/html
|
COPY --chown=ubuntu:ubuntu server.conf entry.sh ./
|
||||||
|
|
||||||
# start script
|
|
||||||
WORKDIR /root
|
|
||||||
COPY sendgrid.ke[y] ip_update.py ./
|
|
||||||
COPY entry.sh ./
|
|
||||||
|
@ -1,32 +1,29 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# server needs to be up to get certs
|
|
||||||
nginx
|
|
||||||
while [ ! -f /var/run/nginx.pid ]
|
|
||||||
do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# get certs if needed
|
# get certs if needed
|
||||||
certbot --nginx \
|
certbot certonly --standalone \
|
||||||
--webroot-path /var/www/matthewtran.com \
|
--http-01-port 8080 \
|
||||||
|
--config-dir ~/certbot \
|
||||||
|
--work-dir ~/certbot/work \
|
||||||
|
--logs-dir ~/certbot/logs \
|
||||||
--non-interactive --agree-tos -m matthewlamtran@berkeley.edu \
|
--non-interactive --agree-tos -m matthewlamtran@berkeley.edu \
|
||||||
-d matthewtran.com \
|
-d matthewtran.com \
|
||||||
-d www.matthewtran.com \
|
-d www.matthewtran.com \
|
||||||
-d git.matthewtran.com
|
-d git.matthewtran.com
|
||||||
nginx -s reload
|
|
||||||
|
|
||||||
# background process to renew certs and check ip changes
|
# background process to renew certs and check ip changes
|
||||||
update() {
|
update() {
|
||||||
certbot renew --quiet
|
certbot renew --quiet \
|
||||||
|
--config-dir ~/certbot \
|
||||||
|
--work-dir ~/certbot/work \
|
||||||
|
--logs-dir ~/certbot/logs
|
||||||
sleep 86400
|
sleep 86400
|
||||||
}
|
}
|
||||||
update &
|
update &
|
||||||
./ip_update.py &
|
./ip_update.py &
|
||||||
|
|
||||||
# wait for termination
|
# run server
|
||||||
cleanup() {
|
nginx -c ~/server.conf
|
||||||
echo "stopping..."
|
trap 'echo "stopping website..."' TERM
|
||||||
}
|
tail -f /dev/null &
|
||||||
trap 'cleanup' TERM
|
wait $!
|
||||||
wait $! # wait SIGTERM, other processes can just be killed
|
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
|
|
||||||
server_name matthewtran.com www.matthewtran.com;
|
|
||||||
|
|
||||||
root /var/www/matthewtran.com/html;
|
|
||||||
index index.html;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ =404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
|
|
||||||
server_name git.matthewtran.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
client_max_body_size 512M;
|
|
||||||
proxy_pass http://gitea:3000;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
75
website/server.conf
Normal file
75
website/server.conf
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# adapted from /etc/nginx/nginx.conf
|
||||||
|
worker_processes auto;
|
||||||
|
pid /home/ubuntu/nginx/site.pid;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
ssl_certificate /home/ubuntu/certbot/live/matthewtran.com/fullchain.pem;
|
||||||
|
ssl_certificate_key /home/ubuntu/certbot/live/matthewtran.com/privkey.pem;
|
||||||
|
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
access_log /dev/stdout;
|
||||||
|
client_body_temp_path /home/ubuntu/nginx/body;
|
||||||
|
proxy_temp_path /home/ubuntu/nginx/proxy;
|
||||||
|
fastcgi_temp_path /home/ubuntu/nginx/fastcgi;
|
||||||
|
uwsgi_temp_path /home/ubuntu/nginx/uwsgi;
|
||||||
|
scgi_temp_path /home/ubuntu/nginx/scgi;
|
||||||
|
|
||||||
|
# SSL redirect
|
||||||
|
server {
|
||||||
|
listen 8080 default_server;
|
||||||
|
listen [::]:8080 default_server;
|
||||||
|
server_name _;
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
# default
|
||||||
|
server {
|
||||||
|
listen 8443 ssl default_server;
|
||||||
|
listen [::]:8443 ssl default_server;
|
||||||
|
server_name _;
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# website
|
||||||
|
server {
|
||||||
|
listen 8443 ssl;
|
||||||
|
listen [::]:8443 ssl;
|
||||||
|
server_name matthewtran.com www.matthewtran.com;
|
||||||
|
|
||||||
|
root /home/ubuntu/html;
|
||||||
|
index index.html;
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# gitea
|
||||||
|
server {
|
||||||
|
listen 8443 ssl;
|
||||||
|
listen [::]:8443 ssl;
|
||||||
|
server_name git.matthewtran.com;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
client_max_body_size 512M;
|
||||||
|
proxy_pass http://gitea:3000;
|
||||||
|
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 https;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user