Merge branch 'installation' into 'develop'

Installation

See merge request soapbox-pub/ditto!40
This commit is contained in:
Alex Gleason 2023-09-11 20:11:11 +00:00
commit 6382f98a5e
4 changed files with 116 additions and 4 deletions

82
installation/ditto.conf Normal file
View File

@ -0,0 +1,82 @@
# Nginx configuration for Ditto with IPFS.
#
# Edit this file to change occurences of "example.com" to your own domain.
upstream ditto {
server 127.0.0.1:8000;
}
upstream ipfs_gateway {
server 127.0.0.1:8080;
}
server {
listen 80;
listen [::]:80;
location /.well-known/acme-challenge/ { allow all; }
location / { return 301 https://$host$request_uri; }
}
server {
# Uncomment these lines once you acquire a certificate:
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
server_name example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Uncomment these lines once you acquire a certificate:
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 100m;
ignore_invalid_headers off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://ditto;
}
}
server {
# Uncomment these lines once you acquire a certificate:
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
server_name media.example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# Uncomment these lines once you acquire a certificate:
# ssl_certificate /etc/letsencrypt/live/media.example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/media.example.com/privkey.pem;
keepalive_timeout 70;
sendfile on;
client_max_body_size 1m;
ignore_invalid_headers off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://ipfs_gateway;
}
}

View File

@ -0,0 +1,14 @@
[Unit]
Description=Ditto
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=ditto
WorkingDirectory=/opt/ditto
ExecStart=/usr/local/bin/deno task start
Restart=on-failure
[Install]
WantedBy=multi-user.target

13
installation/ipfs.service Normal file
View File

@ -0,0 +1,13 @@
[Unit]
Description=IPFS Daemon
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=ditto
ExecStart=/usr/local/bin/ipfs daemon
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@ -3,8 +3,6 @@ import { IpfsHash, S3Client } from '@/deps.ts';
import type { Uploader } from './types.ts'; import type { Uploader } from './types.ts';
const s3 = new S3Client({ ...Conf.s3 });
/** /**
* S3-compatible uploader for AWS, Wasabi, DigitalOcean Spaces, and more. * S3-compatible uploader for AWS, Wasabi, DigitalOcean Spaces, and more.
* Files are named by their IPFS CID and exposed at `/ipfs/<cid>`, letting it * Files are named by their IPFS CID and exposed at `/ipfs/<cid>`, letting it
@ -14,7 +12,7 @@ const s3Uploader: Uploader = {
async upload(file) { async upload(file) {
const cid = await IpfsHash.of(file.stream()) as string; const cid = await IpfsHash.of(file.stream()) as string;
await s3.putObject(`ipfs/${cid}`, file.stream(), { await client().putObject(`ipfs/${cid}`, file.stream(), {
metadata: { metadata: {
'Content-Type': file.type, 'Content-Type': file.type,
'x-amz-acl': 'public-read', 'x-amz-acl': 'public-read',
@ -26,8 +24,13 @@ const s3Uploader: Uploader = {
}; };
}, },
async delete(cid) { async delete(cid) {
await s3.deleteObject(`ipfs/${cid}`); await client().deleteObject(`ipfs/${cid}`);
}, },
}; };
/** Build S3 client from config. */
function client() {
return new S3Client({ ...Conf.s3 });
}
export { s3Uploader }; export { s3Uploader };