create.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash
  2. set -e
  3. if [ "$#" -ne 1 ]
  4. then
  5. echo "Usage: $0 USER"
  6. exit 1
  7. fi
  8. apt -y install zsh git zip unzip bzip2 curl wget vim pwgen
  9. if id "$1" &>/dev/null
  10. then
  11. echo "user $1 found"
  12. else
  13. echo "create user $1"
  14. useradd -m -d /workspace/home/$1 -s /bin/zsh $1
  15. fi
  16. echo 'reset password'
  17. passwd -l $1
  18. echo "$1:$(pwgen 32 1)" | chpasswd
  19. echo 'setup nginx'
  20. if [ ! -d /workspace/www/$1/htdocs ]
  21. then
  22. mkdir -p /workspace/www/$1/htdocs
  23. chown $1:$1 /workspace/www/$1/htdocs
  24. fi
  25. if [ ! -d /workspace/www/$1/logs ]
  26. then
  27. mkdir -p /workspace/www/$1/logs
  28. chown www-data:www-data /workspace/www/$1/logs
  29. fi
  30. if [ ! -d /workspace/www/$1/tmp ]
  31. then
  32. mkdir -p /workspace/tmp/$1
  33. chown $1:$1 /workspace/tmp/$1
  34. fi
  35. if [ ! -f /workspace/www/$1/nginx.conf ]
  36. then
  37. # https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
  38. cat > /workspace/www/$1/nginx.conf <<EOF
  39. # https://laravel.com/docs/9.x/deployment#nginx
  40. server {
  41. listen 80;
  42. server_name ${1//_/-}.spring.wikipali.org;
  43. access_log /workspace/www/$1/logs/access.org;
  44. error_log /workspace/www/$1/logs/error.log;
  45. add_header X-Frame-Options "SAMEORIGIN";
  46. add_header X-Content-Type-Options "nosniff";
  47. root /workspace/www/$1/htdocs/public;
  48. index index.html index.php;
  49. charset utf-8;
  50. gzip on;
  51. client_max_body_size 16M;
  52. location / {
  53. try_files \$uri \$uri/ /index.php?\$query_string;
  54. }
  55. location = /favicon.ico { access_log off; log_not_found off; }
  56. location = /robots.txt { access_log off; log_not_found off; }
  57. error_page 404 /index.php;
  58. location ~ \.php\$ {
  59. fastcgi_pass unix:/run/php/php-fpm.sock;
  60. fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
  61. include fastcgi_params;
  62. }
  63. location ~ /\.(?!well-known).* {
  64. deny all;
  65. }
  66. }
  67. EOF
  68. ln -sf /workspace/www/$1/nginx.conf /etc/nginx/sites-enabled/$1.spring.wikipali.org.conf
  69. fi
  70. echo "done($1)."
  71. exit 0