diff --git a/.config/local-db.yml b/.config/local-db.yml new file mode 100644 index 0000000000..de55e3f217 --- /dev/null +++ b/.config/local-db.yml @@ -0,0 +1,290 @@ +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# Misskey configuration +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +# ┌─────┐ +#───┘ URL └───────────────────────────────────────────────────── + +# Final accessible URL seen by a user. +url: http://localhost:3000 + +# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE +# URL SETTINGS AFTER THAT! + +# ┌───────────────────────┐ +#───┘ Port and TLS settings └─────────────────────────────────── + +# +# Misskey requires a reverse proxy to support HTTPS connections. +# +# +----- https://example.tld/ ------------+ +# +------+ |+-------------+ +----------------+| +# | User | ---> || Proxy (443) | ---> | Misskey (3000) || +# +------+ |+-------------+ +----------------+| +# +---------------------------------------+ +# +# You need to set up a reverse proxy. (e.g. nginx) +# An encrypted connection with HTTPS is highly recommended +# because tokens may be transferred in GET requests. + +# The port that your Misskey server should listen on. +port: 3000 + +# ┌──────────────────────────┐ +#───┘ PostgreSQL configuration └──────────────────────────────── + +db: + host: localhost + port: 5432 + + # Database name + db: postgres + + # Auth + user: postgres + pass: ci + + # Whether disable Caching queries + #disableCache: true + + # Extra Connection options + #extra: + # ssl: true + +dbReplications: false + +# You can configure any number of replicas here +#dbSlaves: +# - +# host: +# port: +# db: +# user: +# pass: +# - +# host: +# port: +# db: +# user: +# pass: + +# ┌─────────────────────┐ +#───┘ Redis configuration └───────────────────────────────────── + +redis: + host: localhost + port: 6379 + #family: 0 # 0=Both, 4=IPv4, 6=IPv6 + #pass: example-pass + #prefix: example-prefix + #db: 1 + +#redisForPubsub: +# host: redis +# port: 6379 +# #family: 0 # 0=Both, 4=IPv4, 6=IPv6 +# #pass: example-pass +# #prefix: example-prefix +# #db: 1 + +#redisForJobQueue: +# host: redis +# port: 6379 +# #family: 0 # 0=Both, 4=IPv4, 6=IPv6 +# #pass: example-pass +# #prefix: example-prefix +# #db: 1 + +#redisForTimelines: +# host: redis +# port: 6379 +# #family: 0 # 0=Both, 4=IPv4, 6=IPv6 +# #pass: example-pass +# #prefix: example-prefix +# #db: 1 + +#redisForRateLimit: +# host: localhost +# port: 6379 +# #family: 0 # 0=Both, 4=IPv4, 6=IPv6 +# #pass: example-pass +# #prefix: example-prefix +# #db: 1 +# # You can specify more ioredis options... +# #username: example-username + +# ┌───────────────────────────────┐ +#───┘ Fulltext search configuration └───────────────────────────── + +# These are the setting items for the full-text search provider. +fulltextSearch: + # You can select the ID generation method. + # - sqlLike (default) + # Use SQL-like search. + # This is a standard feature of PostgreSQL, so no special extensions are required. + # - sqlPgroonga + # Use pgroonga. + # You need to install pgroonga and configure it as a PostgreSQL extension. + # In addition to the above, you need to create a pgroonga index on the text column of the note table. + # see: https://pgroonga.github.io/tutorial/ + # - meilisearch + # Use Meilisearch. + # You need to install Meilisearch and configure. + provider: sqlLike + +# For Meilisearch settings. +# If you select "meilisearch" for "fulltextSearch.provider", it must be set. +# You can set scope to local or global (default value) +# (include notes from remote). + +#meilisearch: +# host: meilisearch +# port: 7700 +# apiKey: '' +# ssl: true +# index: '' +# scope: global + +# ┌───────────────┐ +#───┘ ID generation └─────────────────────────────────────────── + +# You can select the ID generation method. +# You don't usually need to change this setting, but you can +# change it according to your preferences. + +# Available methods: +# aid ... Short, Millisecond accuracy +# aidx ... Millisecond accuracy +# meid ... Similar to ObjectID, Millisecond accuracy +# ulid ... Millisecond accuracy +# objectid ... This is left for backward compatibility + +# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE +# ID SETTINGS AFTER THAT! + +id: 'aidx' + +# ┌─────────────────────┐ +#───┘ Other configuration └───────────────────────────────────── + +# Whether disable HSTS +#disableHsts: true + +# Number of worker processes +#clusterLimit: 1 + +# Job concurrency per worker +# deliverJobConcurrency: 128 +# inboxJobConcurrency: 16 +# relashionshipJobConcurrency: 16 +# What's relashionshipJob?: +# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations. + +# Job rate limiter +# deliverJobPerSec: 128 +# inboxJobPerSec: 32 +# relashionshipJobPerSec: 64 + +# Job attempts +# deliverJobMaxAttempts: 12 +# inboxJobMaxAttempts: 8 + +# Local address used for outgoing requests +#outgoingAddress: 127.0.0.1 + +# IP address family used for outgoing request (ipv4, ipv6 or dual) +#outgoingAddressFamily: ipv4 + +# Amount of characters that can be used when writing notes. Longer notes will be rejected. (minimum: 1) +#maxNoteLength: 3000 +# Amount of characters that will be saved for remote notes. Longer notes will be truncated to this length. (minimum: 1) +#maxRemoteNoteLength: 100000 +# Amount of characters that can be used when writing content warnings. Longer warnings will be rejected. (minimum: 1) +#maxCwLength: 500 +# Amount of characters that will be saved for remote content warnings. Longer warnings will be truncated to this length. (minimum: 1) +#maxRemoteCwLength: 5000 +# Amount of characters that can be used when writing media descriptions (alt text). Longer descriptions will be rejected. (minimum: 1) +#maxAltTextLength: 20000 +# Amount of characters that will be saved for remote media descriptions (alt text). Longer descriptions will be truncated to this length. (minimum: 1) +#maxRemoteAltTextLength: 100000 + +# Proxy for HTTP/HTTPS +#proxy: http://127.0.0.1:3128 + +proxyBypassHosts: + - api.deepl.com + - api-free.deepl.com + - www.recaptcha.net + - hcaptcha.com + - challenges.cloudflare.com + +# Proxy for SMTP/SMTPS +#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT +#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4 +#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5 + +# Media Proxy +#mediaProxy: https://example.com/proxy + +# Proxy remote files (default: true) +# Proxy remote files by this instance or mediaProxy to prevent remote files from running in remote domains. +proxyRemoteFiles: true + +# Movie Thumbnail Generation URL +# There is no reference implementation. +# For example, Misskey will point to the following URL: +# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4 +#videoThumbnailGenerator: https://example.com + +# Sign outgoing ActivityPub GET request (default: true) +signToActivityPubGet: true +# Sign outgoing ActivityPub Activities (default: true) +# Linked Data signatures are cryptographic signatures attached to each activity to provide proof of authenticity. +# When using authorized fetch, this is often undesired as any signed activity can be forwarded to a blocked instance by relays and other instances. +# This setting allows admins to disable LD signatures for increased privacy, at the expense of fewer relayed activities and additional inbound fetch (GET) requests. +attachLdSignatureForRelays: true +# check that inbound ActivityPub GET requests are signed ("authorized fetch") +checkActivityPubGetSignature: false + +# For security reasons, uploading attachments from the intranet is prohibited, +# but exceptions can be made from the following settings. Default value is "undefined". +# Read changelog to learn more (Improvements of 12.90.0 (2021/09/04)). +allowedPrivateNetworks: [ + '127.0.0.1/32', + '192.168.65.0/24' +] + +#customMOTD: ['Hello World', 'The sharks rule all', 'Shonks'] + +# Upload or download file size limits (bytes) +#maxFileSize: 262144000 + +# CHMod-style permission bits to apply to uploaded files. +# Permission bits are specified as a base-8 string representing User/Group/Other permissions. +# This setting is only useful for custom deployments, such as using a reverse proxy to serve media. +#filePermissionBits: '644' + +# Log settings +# logging: +# sql: +# # Outputs query parameters during SQL execution to the log. +# # default: false +# enableQueryParamLogging: false +# # Disable query truncation. If set to true, the full text of the query will be output to the log. +# # default: false +# disableQueryTruncation: false + +# Settings for the activity logger, which records inbound activities to the database. +# Disabled by default due to the large volume of data it saves. +#activityLogging: + # Log activities to the database (default: false) + #enabled: false + + # Save the activity before processing, then update later with the results. + # This has the advantage of capturing activities that cause a hard-crash, but doubles the number of queries used. + # Default: false + #preSave: false + + # How long to save each log entry before deleting it. + # Default: 2592000000 (1 week) + #maxAge: 2592000000 diff --git a/.config/dev.yml b/.config/local-dev.yml similarity index 99% rename from .config/dev.yml rename to .config/local-dev.yml index 11c9d45d6a..db38c1c187 100644 --- a/.config/dev.yml +++ b/.config/local-dev.yml @@ -6,7 +6,7 @@ #───┘ URL └───────────────────────────────────────────────────── # Final accessible URL seen by a user. -url: http://misskey.local:3000 +url: http://localhost:3000 # ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE # URL SETTINGS AFTER THAT! diff --git a/.gitignore b/.gitignore index bc248c3aaf..425fc967bd 100644 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,8 @@ coverage !/.config/docker_example.env !/.config/cypress-devcontainer.yml !/.config/docker_ci.env -!/.config/dev.yml +!/.config/local-dev.yml +!/.config/local-db.yml docker-compose.yml ./compose.yml .devcontainer/compose.yml diff --git a/dev.sh b/dev.sh new file mode 100755 index 0000000000..cf282d06cf --- /dev/null +++ b/dev.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +read -p "How do you want to develop? [(l)ocal / (c)ontainer] " devset +case $devset in + [Ll] ) + echo "Going to create postgres and redis containers now. They will log to this terminal." + echo "Press Ctrl + C to exit." + sleep 2 + devmode="local-db" + ;; + [Cc] ) + echo "Going to create a container environment you can work in." + echo "Simply exit to stop the environment." + sleep 2 + devmode="local-dev" + ;; + * ) + echo "Invalid option supplied. Quitting..." + exit -1 + ;; +esac + +cp ".config/$devmode.yml" .config/default.yml +cp .config/docker_ci.env .config/docker.env + +if [[ "$devmode" == "local-dev" ]]; then + docker compose -f "./compose.$devmode.yml" up -d + docker compose -f "./compose.$devmode.yml" exec web apt-get update + docker compose -f "./compose.$devmode.yml" exec web apt-get install -y bash + + echo Installing dependencies... + docker compose -f "./compose.$devmode.yml" exec web apt-get install -y git wget curl build-essential python3 ffmpeg libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev + docker compose -f "./compose.$devmode.yml" exec web corepack enable + docker compose -f "./compose.$devmode.yml" exec web corepack prepare pnpm@latest --activate + docker compose -f "./compose.$devmode.yml" exec web git submodule update --init + docker compose -f "./compose.$devmode.yml" exec web pnpm install --frozen-lockfile + + read -p "Is this a new database? [y/N] " runinit + case $runinit in + [Yy] ) + docker compose -f "./compose.$devmode.yml" exec web pnpm build + docker compose -f "./compose.$devmode.yml" exec web pnpm migrate + ;; + * ) + ;; + esac + + docker compose -f "./compose.$devmode.yml" exec web bash + + echo Stopping containers... + docker compose -f "./compose.$devmode.yml" stop +fi + +if [[ "$devmode" == "local-db" ]]; then + read -p "Did you setup corepack and enable pnpm? [Y/n] " getpnpm + case $getpnpm in + [Nn] ) + corepack enable + corepack prepare pnpm@latest --activate + ;; + * ) + ;; + esac + + pnpm i + + read -p "Is this a new database? [y/N] " runinit + case $runinit in + [Yy] ) + docker compose -f "./compose.$devmode.yml" up -d + pnpm build + pnpm migrate + docker compose -f "./compose.$devmode.yml" down + ;; + * ) + ;; + esac + + docker compose -f "./compose.$devmode.yml" up +fi + +read -p "Scrub dev environment? (Deletes containers AND instance!!!) [y/N] " scrubDev + +case $scrubDev in + [Yy] ) + if [[ "$devmode" == "local-dev" ]]; then + docker compose -f "./compose.$devmode.yml" start web + docker compose -f "./compose.$devmode.yml" exec web pnpm clean-all + else + pnpm clean-all + fi + docker compose -f "./compose.$devmode.yml" down + rm -rf ./db -v + rm -rf ./redis -v + rm -rf ./files -v + rm -rf ./node_modules -v #TODO: check if these last two are needed + rm -rf ./pnpm-store -v + ;; + * ) + ;; +esac + +# read -p "Reset databases? [y/N] " cleardb +# case $cleardb in +# [Yy] ) +# echo "Clearning postgres..." +# rm -rf ./db +# sleep 1 +# echo "Clearing redis..." +# rm -rf ./redis +# sleep 1 +# ;; +# * ) +# ;; +# esac diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index 255efce80f..b1fe0fdbba 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -90,6 +90,7 @@ export function getConfig(): UserConfig { base: '/vite/', server: { + host: true, port: 5173, hmr: { // バックエンド経由での起動時、Viteは5173経由でアセットを参照していると思い込んでいるが実際は3000から配信される diff --git a/setup-dev.sh b/setup-dev.sh deleted file mode 100755 index 2bbc65efd9..0000000000 --- a/setup-dev.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -read -p "Reset databases? [y/N] " cleardb - -case $cleardb in - [Yy] ) - echo "Clearning postgres..." - rm -rf ./db - sleep 1 - echo "Clearing redis..." - rm -rf ./redis - sleep 1 - ;; - * ) - ;; -esac - -cp .config/dev.yml .config/default.yml -cp .config/dev.yml .config/test.yml -cp .config/docker_ci.env .config/docker.env -cp compose.local-dev.yml compose.yml - -echo Creating environment... -docker compose up -d -docker compose exec web apt-get update -docker compose exec web apt-get install -y bash - -echo Installing dependencies... -docker compose exec web apt-get install -y git wget curl build-essential python3 ffmpeg libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev -docker compose exec web corepack enable -docker compose exec web corepack prepare pnpm@latest --activate -docker compose exec web git submodule update --init -docker compose exec web pnpm install --frozen-lockfile - -echo Environment is ready. -echo 5173 for dev, and 3000 for prod. -echo Do not forget to \`pnpm migrate\` before your first launch! -docker compose exec web bash - -echo Stopping containers... -docker compose stop - -read -p "Delete containers? [y/N] " scrubContainers - -case $scrubContainers in - [Yy] ) - docker compose down - ;; - * ) - ;; -esac - -rm -f compose.yml