Compare commits

...

107 Commits

Author SHA1 Message Date
hackerESQ 000c459d76 Merge pull request #55 from investbrainapp/optimize-dockerfile
workflow: Downgrade github runner to Ubunutu 22.04
2025-01-27 15:20:52 -06:00
hackerESQ 307f65c898 Merge branch 'main' into optimize-dockerfile 2025-01-27 15:20:46 -06:00
hackerESQ 5db54adfb7 cleanup 2025-01-27 15:16:01 -06:00
hackerESQ 19fb9a85fc cleanup 2025-01-27 14:26:40 -06:00
hackerESQ 9d48ebbad9 downgrade 2025-01-27 14:26:27 -06:00
hackerESQ 077b5257e8 swap 2025-01-27 14:02:28 -06:00
hackerESQ b84602a5ed swap 2025-01-27 13:59:03 -06:00
hackerESQ 43541c1af2 swap 2025-01-27 13:57:30 -06:00
hackerESQ 8c4d0fa1a1 merge 2025-01-27 13:23:00 -06:00
hackerESQ 16fed7a8ca add flags 2025-01-27 13:03:13 -06:00
hackerESQ c1009a19fb wip 2025-01-27 12:48:16 -06:00
hackerESQ be189cf899 typo 2025-01-27 12:01:14 -06:00
hackerESQ 8116d1d4de try sury package no buikd 2025-01-27 11:55:18 -06:00
hackerESQ ab698c8903 add fpic support for multi arch 2025-01-27 11:33:45 -06:00
hackerESQ 74b16f2165 streamline 2025-01-27 11:06:58 -06:00
hackerESQ fafbbe9b3a back to ubuntu (has docker preinstalled) 2025-01-27 10:51:31 -06:00
hackerESQ 04b32c3f33 try mac for github action 2025-01-27 10:49:24 -06:00
hackerESQ 0babcbfac4 update readme 2025-01-27 08:23:47 -06:00
hackerESQ 2da57d95b7 add pgsql back 2025-01-26 23:48:24 -06:00
hackerESQ d317c03819 Merge pull request #54 from investbrainapp/optimize-dockerfile
Optimize dockerfile
2025-01-26 23:40:16 -06:00
hackerESQ 2e187b5e08 rmeove pgsql 2025-01-26 23:39:30 -06:00
hackerESQ 064343c1ff Update build-and-push-images.yml 2025-01-26 23:25:31 -06:00
hackerESQ efc67c63d8 Update build-and-push-images.yml 2025-01-26 23:22:46 -06:00
hackerESQ a978377501 Update build-and-push-images.yml 2025-01-26 23:20:40 -06:00
hackerESQ 1bf05a1b87 use default vars for db config 2025-01-26 23:02:40 -06:00
hackerESQ 5e3c993a15 Merge pull request #53 from investbrainapp/optimize-dockerfile
Remove bcmath
2025-01-26 22:57:13 -06:00
hackerESQ 4220bb629f remove bcmath 2025-01-26 22:56:41 -06:00
hackerESQ bdd30c238c Merge pull request #52 from investbrainapp/optimize-dockerfile
Optimize Docker Image
2025-01-26 21:59:56 -06:00
hackerESQ 778d799113 cleanup 2025-01-26 21:56:41 -06:00
hackerESQ 47cd1b6a91 wip 2025-01-26 21:54:56 -06:00
hackerESQ 118232e906 update readme 2025-01-26 21:50:25 -06:00
hackerESQ 64c84fe708 wip 2025-01-26 21:46:59 -06:00
hackerESQ cff3c02851 wip 2025-01-26 21:45:38 -06:00
hackerESQ 60577d02c7 wip 2025-01-26 21:45:17 -06:00
hackerESQ 99749bd9c9 this is it 2025-01-26 21:42:39 -06:00
hackerESQ b3ca2e5927 wip 2025-01-26 21:38:59 -06:00
hackerESQ b71e9e2e80 make info messages pop 2025-01-26 21:33:49 -06:00
hackerESQ 72a8aacabe wip 2025-01-26 21:30:12 -06:00
hackerESQ a0e9cfb40d wip 2025-01-26 21:24:59 -06:00
hackerESQ 46707c1149 wip 2025-01-26 21:20:02 -06:00
hackerESQ 497efcfa76 wip 2025-01-26 21:08:48 -06:00
hackerESQ 1201c248ee cleanup 2025-01-26 21:06:08 -06:00
hackerESQ 395eb31801 wip 2025-01-26 20:40:44 -06:00
hackerESQ b27edd9818 wip 2025-01-26 11:36:42 -06:00
hackerESQ 51c43e9893 make sure key is set 2025-01-26 11:31:07 -06:00
hackerESQ ec2019430e ensure storage is there 2025-01-26 11:28:20 -06:00
hackerESQ 05174e93ad wip 2025-01-26 11:20:52 -06:00
hackerESQ e8ec94bfa8 add in-line docs to env 2025-01-25 23:36:33 -06:00
hackerESQ c6642e028c updat example env 2025-01-25 23:30:00 -06:00
hackerESQ 6d5a5f46b9 update readme for new install instructions 2025-01-25 23:17:21 -06:00
hackerESQ e651eb86ca bump front end 2025-01-25 22:56:22 -06:00
hackerESQ 84171da29b bump php version 2025-01-25 22:55:45 -06:00
hackerESQ d463ec689b last one 2025-01-25 22:54:10 -06:00
hackerESQ 416a82058b getting close 2025-01-25 22:52:44 -06:00
hackerESQ 6f2324ad1b wip 2025-01-25 22:37:26 -06:00
hackerESQ c19f13edc1 wip 2025-01-25 22:36:48 -06:00
hackerESQ 390b137e0b wiiiip 2025-01-25 22:33:27 -06:00
hackerESQ 0c7d4a83f1 wip 2025-01-25 22:24:51 -06:00
hackerESQ 25112cb03a wip 2025-01-25 22:22:42 -06:00
hackerESQ 5ade4b35a0 wip 2025-01-25 22:19:54 -06:00
hackerESQ 00067c56d4 wip 2025-01-25 22:08:07 -06:00
hackerESQ 620566490b wip 2025-01-25 21:57:50 -06:00
hackerESQ 7245f4cc69 wip 2025-01-25 21:53:55 -06:00
hackerESQ 575fecb163 wip 2025-01-25 21:43:58 -06:00
hackerESQ 4120b1abfa set permission in entry script 2025-01-25 21:34:18 -06:00
hackerESQ 801d3739fc wip 2025-01-25 21:21:08 -06:00
hackerESQ 92bdf14508 wip 2025-01-25 21:17:27 -06:00
hackerESQ fa25a82693 wip 2025-01-25 21:12:16 -06:00
hackerESQ 1684f3e0cb wip 2025-01-25 21:06:54 -06:00
hackerESQ a31f807da8 wip 2025-01-25 20:49:24 -06:00
hackerESQ 6d92b49f3d wip 2025-01-25 20:46:40 -06:00
hackerESQ 11cdf975bc wip 2025-01-25 20:40:26 -06:00
hackerESQ 7bacc28e3b wip 2025-01-25 20:37:50 -06:00
hackerESQ 4bbb71d434 wip 2025-01-25 20:34:03 -06:00
hackerESQ 8da153a476 wip 2025-01-25 20:31:40 -06:00
hackerESQ 1189325638 wip 2025-01-25 20:28:38 -06:00
hackerESQ e93459ae55 wip 2025-01-25 20:25:25 -06:00
hackerESQ b1fcf51546 wip 2025-01-25 20:21:38 -06:00
hackerESQ 75716368bb wip 2025-01-25 20:20:56 -06:00
hackerESQ ec15e2bb63 wip 2025-01-25 20:15:21 -06:00
hackerESQ 9a3e030ce7 wip 2025-01-25 20:13:19 -06:00
hackerESQ 4f5894ef4a wip 2025-01-25 18:41:20 -06:00
hackerESQ e0b5610d90 wip 2025-01-25 18:35:18 -06:00
hackerESQ bc34519a26 wip 2025-01-25 18:22:12 -06:00
hackerESQ dc69bfa8c7 make php extensions required 2025-01-25 18:18:31 -06:00
hackerESQ cf7c5fc23a wip 2025-01-25 18:12:55 -06:00
hackerESQ 16d5b80657 wip 2025-01-25 18:09:02 -06:00
hackerESQ 8dd153fb53 docs: added more badges 2025-01-17 12:46:29 -06:00
hackerESQ 89bfb28019 docs: add badges 2025-01-15 22:37:03 -06:00
hackerESQ 1215e47297 Merge pull request #49 from investbrainapp/upgrade-laravel
chore: upgrade composer deps
2024-12-26 12:34:53 -06:00
hackerESQ 4016899179 chore: upgrade composer deps 2024-12-26 12:34:29 -06:00
hackerESQ 1cad9b83fb Update build-and-push-images.yml 2024-12-20 23:05:05 -06:00
hackerESQ 780ee76dc3 Update build-and-push-images.yml 2024-12-20 23:02:36 -06:00
hackerESQ 4d8e17f59f Update build-and-push-images.yml 2024-12-20 22:57:02 -06:00
hackerESQ 21c27e22da Update build-and-push-images.yml 2024-12-20 22:55:56 -06:00
hackerESQ 2e978089b5 rename workflow 2024-12-20 22:25:39 -06:00
hackerESQ 803fe7147e Set up github workflow to build and push images 2024-12-20 22:24:54 -06:00
hackerESQ 6490364a5d chore: update dockerignore 2024-12-20 16:19:07 -06:00
hackerESQ 2ad773952e chore: slim down docker build 2024-12-19 21:53:50 -06:00
hackerESQ 138e71107e chore: clean up dockerfile and entrypoint script 2024-12-19 21:34:58 -06:00
hackerESQ bde399f589 chore: move dockerfile back to repo 2024-12-19 21:10:00 -06:00
hackerESQ 8a43602363 docs: clarify upsert 2024-12-18 16:03:32 -06:00
hackerESQ 5a56790fd4 docs: more refinement and word choice 2024-12-18 16:03:01 -06:00
hackerESQ 892f681174 docs: add self-hosted llm to readme intro section 2024-12-18 15:53:09 -06:00
hackerESQ 997b5420ee Merge pull request #44 from investbrainapp/create-docker-image
Use the investbrainapp/investbrain docker image
2024-12-17 18:28:03 -06:00
hackerESQ 643bbe3af2 wait for db to be ready in order to migrate 2024-12-16 21:54:59 -06:00
hackerESQ f85f0f19b9 wip 2024-12-16 21:33:45 -06:00
18 changed files with 1325 additions and 721 deletions
+16
View File
@@ -0,0 +1,16 @@
.git
.env
node_modules
packages
vendor
tests
.DS_Store
vapor.yml
.vapor
storage/app/livewire-tmp/*
storage/app/public/profile-photos/*
storage/framework/cache/*
storage/framework/sessions/*
storage/framework/testing/*
storage/framework/views/*
storage/framework/logs/*
+25 -10
View File
@@ -1,24 +1,35 @@
APP_NAME=Investbrain
APP_ENV=production
# Generate a secure key using `openssl rand -base64 32`
APP_KEY=
APP_DEBUG=true
APP_TIMEZONE=UTC
# Port for NGINX to listen on
APP_PORT=8000
# Used internally to generate absolute links
APP_URL="http://localhost:${APP_PORT}"
SELF_HOSTED=true
# Webroot for static assets (css, js, images, etc)
ASSET_URL="${APP_URL}"
# Enables or disables new user registration
REGISTRATION_ENABLED=true
# ASSET_URL="http://localhost:8000" # (optional) webroot for static assets (css, js, images, etc)
# Enable or disable AI chat feature
AI_CHAT_ENABLED=false
# API key for OpenAI (for Llama support, see docs)
OPENAI_API_KEY=
OPENAI_ORGANIZATION=
# Market data provider to use (comma separated list)
MARKET_DATA_PROVIDER=yahoo
MARKET_DATA_REFRESH=30
ALPHAVANTAGE_API_KEY=
FINNHUB_API_KEY=
# Cadence to refresh market data (in minutes)
MARKET_DATA_REFRESH=30
DAILY_CHANGE_TIME=
#### Advanced configurations ####
ENABLED_LOGIN_PROVIDERS=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
@@ -29,9 +40,13 @@ LINKEDIN_CLIENT_SECRET=
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
APP_NAME=Investbrain
APP_TIMEZONE=UTC
APP_ENV=production
APP_DEBUG=true
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
SELF_HOSTED=true
DB_CONNECTION=mysql
DB_HOST=investbrain-mysql
@@ -52,7 +67,7 @@ QUEUE_CONNECTION=redis
CACHE_STORE=redis
REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_HOST=investbrain-redis
REDIS_PATH=/tmp/database_server.sock
REDIS_PASSWORD=null
REDIS_PORT=6379
@@ -0,0 +1,58 @@
name: Build and push Docker images
on:
push:
tags:
- "v*"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-22.04 #ubuntu-latest
steps:
- name: Increase swap space
run: sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=5120 && sudo chmod 600 /var/swap.1 && sudo /sbin/mkswap /var/swap.1 && sudo /sbin/swapon /var/swap.1
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GIT_HUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Extract version from tag
id: extract-version
run: |
echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
- name: Build and push
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
file: ./docker/Dockerfile
push: true
tags: |
investbrainapp/investbrain:latest
investbrainapp/investbrain:${{ env.version }}
ghcr.io/investbrainapp/investbrain:latest
ghcr.io/investbrainapp/investbrain:${{ env.version }}
+30 -21
View File
@@ -1,5 +1,13 @@
<p align="center"><a href="https://investbra.in" target="_blank"><img src="https://raw.githubusercontent.com/investbrainapp/investbrain/main/investbrain-logo.png" width="400" alt="Investbrain Logo"></a></p>
[![GitHub Repo Stars](https://img.shields.io/github/stars/investbrainapp/investbrain?style=for-the-badge&color=%23CCCCCC)](https://github.com/investbrainapp/investbrain/)
[![GitHub Contributors](https://img.shields.io/github/contributors/investbrainapp/investbrain?style=for-the-badge)](https://github.com/investbrainapp/investbrain/)
[![GitHub Issues](https://img.shields.io/github/issues/investbrainapp/investbrain?style=for-the-badge)](https://github.com/investbrainapp/investbrain/issues)
[![Docker Pulls](https://img.shields.io/docker/pulls/investbrainapp/investbrain?style=for-the-badge)](https://hub.docker.com/r/investbrainapp/investbrain/)
## About Investbrain
Investbrain is a smart open-source investment tracker that helps you manage, track, and make informed decisions about your investments.
@@ -20,31 +28,31 @@ Investbrain is a smart open-source investment tracker that helps you manage, tra
## Under the hood
Investbrain is a Laravel PHP web application that leverages Livewire and Tailwind for its frontend. Most databases should work, including MySQL and SQLite. Out of the box, we feature three market data providers: [Yahoo Finance](https://finance.yahoo.com/), [Finnhub](https://finnhub.io/pricing-stock-api-market-data), and [Alpha Vantage](https://www.alphavantage.co/support/). But we also offer an extensible market data provider interface for intrepid developers to create their own! We also offer an integration with OpenAI for our ["chat with your holdings"](#chat-with-your-holdings) capability. Finally, of course we have robust support for i18n, a11y, and dark mode.
Investbrain is a Laravel PHP web application that leverages Livewire and Tailwind for its frontend. Most databases should work, including MySQL and SQLite. Out of the box, we feature three market data providers: [Yahoo Finance](https://finance.yahoo.com/), [Finnhub](https://finnhub.io/pricing-stock-api-market-data), and [Alpha Vantage](https://www.alphavantage.co/support/). But we also offer an extensible market data provider interface for intrepid developers to create their own! We also offer integrations with OpenAI and Ollama for our ["chat with your holdings"](#chat-with-your-holdings) capability. Finally, of course we have robust support for i18n, a11y, and dark mode.
## Self hosting
For ease of installation, we _highly recommend_ installing Investbrain using the provided [Docker Compose](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml) file, which downloads all the necessary dependencies and seamlessly builds everything you need to get started quickly!
For ease of installation, we _highly recommend_ installing Investbrain using the provided [Docker Compose](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml) file, which uses the official Investbrain Docker image and includes all the necessary dependencies to seamlessly build everything you need to get started quickly!
Before getting started, you should already have the following installed on your machine: [Docker Engine](https://docs.docker.com/engine/install/), [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), and a wild sense of adventure.
Before getting started, you should already have [Docker Engine](https://docs.docker.com/engine/install/) installed on your machine.
Ready? Let's get started!
First, you can clone this repository:
**1. Copy Docker Compose file**
```bash
git clone https://github.com/investbrainapp/investbrain.git && cd investbrain
```
Grab a copy of the [docker-compose.yml](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml)** file and paste the contents into the directory where you plan to install Investbrain.
Then, build the Docker image and bring up the container (this will take a few minutes):
**2. Set your environment**
```bash
docker compose up
```
Adjust the `environment` properties in the Docker Compose file to your preferences. Alternatively, create a .env file in the same directory as your compose file, then reference the .env file using the `env_file` property.
In the previous step, all of the default configurations are set automatically. This includes creating a .env file and setting the required Laravel `APP_KEY`.
_Importantly_, you need to set the `APP_KEY` value to a complex random value. If you're unsure, Investbrain will generate an `APP_KEY` for you on first run - but you must **manually** update your environment configuration with this generated value!
If everything worked as expected, you should now be able to access Investbrain in the browser at. You should create an account by visiting:
> Tip: Want to know what other configuration options are available? You can reference the [.env.example](https://github.com/investbrainapp/investbrain/blob/main/.env.example) file in this respository for available environment configurations.
**3. Run `docker compose up`**
This might take a few minutes to pull the Docker images. But assuming everything worked as expected, you should now be able to access Investbrain in the browser by visiting:
```bash
http://localhost:8000/register
@@ -68,7 +76,7 @@ Investbrain includes an extensible market data provider interface that allows yo
### Configuration
You can specify the market data provider you want to use in your .env file:
You can specify the market data provider you want to use in your environment variables:
```bash
MARKET_DATA_PROVIDER=yahoo
@@ -76,7 +84,7 @@ MARKET_DATA_PROVIDER=yahoo
You can also use Investbrain's built-in fallback mechanism to ensure reliable data access. If any provider fails, Investbrain will automatically attempt to retrieve data from the next available provider, continuing through your configured providers until one returns successfully.
Your selected providers should be listed in your .env file. Each should be separated by a comma:
Your selected providers should be listed in your environment variables. Each should be separated by a comma:
```bash
MARKET_DATA_PROVIDER=yahoo,alphavantage
@@ -109,11 +117,11 @@ Feel free to submit a PR with any custom providers you create.
## Import / Export
Investbrain includes a convenient feature which allows you to import and export portfolios and transaction data.
Investbrain includes a convenient feature which allows you to maintain the portability of your portfolios and transaction data.
### Import
Imports are "upserted" to the database. If the record does not already exist in the database, the record will be created. However, when a portfolio or transaction exists (the record's ID matches an existing record), the record will be updated. This way, you can simultaneously create new records, but also bulk update records.
Imports are "upserted" to the database. If the record does not already exist in the database, the record will be created. However, when a portfolio or transaction exists (i.e. the record's ID matches an existing record), the record will be updated. This way, you can simultaneously create new records, but also bulk update records.
### Export
@@ -121,12 +129,13 @@ Exporting your portfolios and transactions is a convenient way to back-up your I
## Configuration
There are several optional configurations available when installing using the recommended [Docker method](#self-hosting). These options are configurable using an environment file. Changes can be made in your [.env](https://github.com/investbrainapp/investbrain/blob/main/.env.example) file before installation.
There are several optional configurations available when installing using the recommended [Docker method](#self-hosting). These options are configurable using an environment file. Configurations can be added to your [.env](https://github.com/investbrainapp/investbrain/blob/main/.env.example) file or to the `environment` property in the [docker-compose.yml](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml) file.
| Option | Description | Default |
| ------------- | ------------- | ------------- |
| APP_URL | The URL where your Investbrain installation will be accessible | http://localhost |
| APP_PORT | The HTTP port exposed by the NGINX container | 8000 |
| APP_KEY | Must be set during install - encryption key for various security-related functions | `null` |
| MARKET_DATA_PROVIDER | The market data provider to use (either `yahoo`, `alphavantage`, or `finnhub`) | yahoo |
| ALPHAVANTAGE_API_KEY | If using the Alpha Vantage provider | `null` |
| FINNHUB_API_KEY | If using the Finnhub provider | `null` |
@@ -141,7 +150,7 @@ There are several optional configurations available when installing using the re
| REGISTRATION_ENABLED | Whether to enable registration of new users | `true` |
> Note: These options affect the [docker-compose.yml](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml) file, so if you decide to make any changes to these default configurations, you'll have to restart the Docker containers before your changes take effect.
> Note: These options affect the [docker-compose.yml](https://github.com/investbrainapp/investbrain/blob/main/docker-compose.yml) file and are cached during run-time. If change any environment configurations, you'll have to restart the container before your changes take effect.
## Updating
@@ -151,10 +160,10 @@ To update Investbrain using the recommended [Docker installation](#self-hosting)
docker compose stop
```
Then pull the latest updates from this repository using git:
Then pull the latest Docker image:
```bash
git pull
docker image pull investbrainapp/investbrain:latest
```
Finally bring the containers back up!
+5 -2
View File
@@ -5,9 +5,12 @@
"keywords": ["stocks", "dividends", "investments", "tracking"],
"license": "CC-BY-NC 4.0",
"require": {
"php": "^8.2",
"php": "^8.3",
"ext-gd": "*",
"ext-mbstring": "*",
"ext-zip": "*",
"finnhub/client": "master@dev",
"laravel/framework": "^11.9",
"laravel/framework": "^11.35",
"laravel/jetstream": "^5.1",
"laravel/sanctum": "^4.0",
"laravel/socialite": "^5.16",
Generated
+573 -337
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -13,7 +13,7 @@ return [
|
*/
'name' => env('APP_NAME', 'Laravel'),
'name' => env('APP_NAME', 'Investbrain'),
/*
|--------------------------------------------------------------------------
+1 -1
View File
@@ -143,7 +143,7 @@ return [
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
+1 -1
View File
@@ -110,7 +110,7 @@ return [
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
'name' => env('MAIL_FROM_NAME', 'Investbrain'),
],
];
+30 -20
View File
@@ -3,34 +3,42 @@ networks:
driver: bridge
services:
app:
build:
context: .
dockerfile: docker/Dockerfile
image: investbrainapp/investbrain:latest
container_name: investbrain-app
restart: unless-stopped
tty: true
expose:
- "9000"
volumes:
- .:/var/www/app:delegated
depends_on:
- mysql
networks:
- investbrain-network
nginx:
image: nginx:alpine
container_name: investbrain-nginx
restart: unless-stopped
tty: true
ports:
- "${APP_PORT:-8000}:80"
environment:
APP_KEY: "" # Generate a key using `openssl rand -base64 32`
APP_URL: "http://localhost:8000"
ASSET_URL: "http://localhost:8000"
DB_CONNECTION: mysql
DB_HOST: investbrain-mysql
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-investbrain}
DB_USERNAME: ${DB_USERNAME:-investbrain}
DB_PASSWORD: ${DB_PASSWORD:-investbrain}
SESSION_DRIVER: redis
QUEUE_CONNECTION: redis
CACHE_STORE: redis
REDIS_HOST: investbrain-redis
volumes:
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/app:delegated
- ./storage:/var/www/app/storage:delegated
depends_on:
- app
- mysql
- redis
networks:
- investbrain-network
redis:
image: redis:alpine
container_name: investbrain-redis
restart: unless-stopped
tty: true
networks:
- investbrain-network
volumes:
- investbrain-redis:/data
mysql:
image: mysql:8.0
container_name: investbrain-mysql
@@ -40,10 +48,12 @@ services:
MYSQL_USER: ${DB_USERNAME:-investbrain}
MYSQL_PASSWORD: ${DB_PASSWORD:-investbrain}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-investbrain}
command:
- --cte-max-recursion-depth=25000
volumes:
- ./docker/mysql.conf:/etc/mysql/conf.d/my.cnf
- investbrain-mysql:/var/lib/mysql
networks:
- investbrain-network
volumes:
investbrain-redis:
investbrain-mysql:
-1
View File
@@ -1 +0,0 @@
dump.rdb
+50 -31
View File
@@ -1,47 +1,66 @@
FROM php:8.3-fpm
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive
ENV APP_NAME=Investbrain
ENV VITE_APP_NAME=Investbrain
ENV APP_DEBUG=true
ENV SELF_HOSTED=true
# Set the working directory
COPY . /var/www/app
WORKDIR /var/www/app
# Install common php extension dependencies
RUN apt-get update && apt-get install -y \
libfreetype-dev \
libjpeg62-turbo-dev \
libpng-dev \
zlib1g-dev \
libzip-dev \
unzip \
libicu-dev \
git \
curl \
redis \
supervisor \
# Allow PHP installs to be built cross-platform
#ENV CFLAGS="-fstack-protector-strong -fpic -fPIC -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
# Install required packages
RUN apt-get update && apt-get upgrade -y \
&& apt-get upgrade -y \
nginx \
libfreetype-dev \
libjpeg62-turbo-dev \
libpng-dev \
zlib1g-dev \
libzip-dev \
libicu-dev \
libpq-dev \
binutils libc6-dev \
supervisor \
unzip curl git \
nodejs npm \
# Clean up APT
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
# Install PHP extensions
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
gd \
zip \
pdo_mysql \
mysqli \
intl
gd pgsql zip pdo_mysql mysqli intl
# Install Node.js and npm
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm@latest
# Set permissions
RUN chown -R www-data:www-data . \
&& chmod -R 775 ./storage \
&& chmod +x ./docker/entrypoint.sh \
&& usermod -s /bin/bash www-data
# Copy over supervisor configuration
# Install Composer and Node.js Install PHP dependencies and build front end assets
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --no-scripts --optimize-autoloader \
&& npm install && npm run build
# Remove default nginx config
RUN rm /etc/nginx/sites-enabled/default
# Copy over configs
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Update permissions
RUN chown -R www-data:www-data . \
&& chmod -R 775 ./storage \
&& chmod +x ./docker/entrypoint.sh
# Serve on port 80
EXPOSE 80
# install composer
COPY --from=composer:2.6.5 /usr/bin/composer /usr/local/bin/composer
# Set up healthcheck
HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl -f http://localhost || exit 1
# Run everything else
CMD ["./docker/entrypoint.sh"]
ENTRYPOINT ["/bin/bash", "./docker/entrypoint.sh"]
Executable → Regular
+44 -31
View File
@@ -2,43 +2,56 @@
cd /var/www/app
echo "====================== Running entrypoint script... ====================== "
if [ ! -f ".env" ]; then
echo " > Ope, gotta create an .env file!"
echo -e "\n====================== Validating environment... ====================== "
if [[ -z "$APP_KEY" ]]; then
echo -e "\n > Oops! The required APP_KEY configuration is missing in your environment! "
echo -e "\n > Generating a key (see below) but this will NOT be persisted between container restarts. "
echo -e "\n > You should set this APP_KEY in your .env file! "
cp .env.example .env
draw_box() {
local text="$1"
local length=${#text}
local border=$(printf '%*s' "$((length + 4))" | tr ' ' '*')
echo -e "\n\n$border"
echo "* $text *"
echo "$border"
}
export APP_KEY=base64:$(openssl rand -base64 32)
draw_box $APP_KEY
fi
echo "====================== Checking for updates... ====================== "
/usr/bin/git pull
echo "====================== Installing Composer dependencies... ====================== "
/usr/local/bin/composer install
echo "====================== Validating environment... ====================== "
if [ $(stat -c '%U' .) != "www-data" ]; then
echo " > Setting correct permissions for pwd..."
chown -R www-data:www-data .
fi
if ( ! grep -q "^APP_KEY=" ".env" || grep -q "^APP_KEY=$" ".env"); then
echo " > Ah, APP_KEY is missing in .env file. Generating a new key!"
/usr/local/bin/php artisan key:generate --force
fi
for dir in storage/framework/cache storage/framework/sessions storage/framework/views; do
if [ ! -d "$dir" ]; then
echo -e "\n > $dir is missing. Creating scaffold for storage directory... "
mkdir -p storage/framework/{cache,sessions,views}
chmod -R 775 storage
chown -R www-data:www-data storage
fi
done
if [ ! -L "public/storage" ]; then
echo " > Creating symbolic link for app public storage..."
echo -e "\n > Creating symbolic link for app public storage... "
/usr/local/bin/php artisan storage:link
/usr/local/bin/php /var/www/app/artisan storage:link
fi
echo "====================== Installing NPM dependencies and building frontend... ====================== "
/usr/bin/npm install
/usr/bin/npm run build
echo -e "\n====================== Running migrations... ====================== "
run_migrations() {
/usr/local/bin/php /var/www/app/artisan migrate --force
}
RETRIES=10
DELAY=5
until run_migrations; do
RETRIES=$((RETRIES-1))
if [ $RETRIES -le 0 ]; then
echo -e "\n > Database is not ready after $RETRIES attempts. Exiting... "
exit 1
fi
echo -e "\n > Waiting for database to be ready... retrying in $DELAY seconds. "
sleep $DELAY
done
echo "====================== Running migrations... ====================== "
/usr/local/bin/php artisan migrate --force
echo "====================== Spinning up Supervisor daemon... ====================== "
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
echo -e "\n====================== Spinning up Supervisor daemon... ====================== \n"
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
-2
View File
@@ -1,2 +0,0 @@
[mysqld]
cte_max_recursion_depth = 25000
+1 -1
View File
@@ -14,7 +14,7 @@ server {
fastcgi_param HTTPS $http_x_forwarded_proto;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass investbrain-app:9000;
fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
-2
View File
@@ -1,2 +0,0 @@
# Redis RDB and AOF file location
dir /var/www/app/docker
+11 -18
View File
@@ -1,41 +1,34 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:nginx]
command=nginx -g 'daemon off;'
autostart=true
autorestart=true
redirect_stderr=true
redirect_stdout=true
[program:php]
command=php-fpm -F
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/php.log
stderr_logfile=/var/log/supervisor/php_error.log
[program:redis]
command=redis-server /var/www/app/docker/redis.conf
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/redis.log
stderr_logfile=/var/log/supervisor/redis_error.log
redirect_stderr=true
redirect_stdout=true
[program:scheduler]
command=php artisan schedule:work
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
redirect_stdout=true
[program:queue-worker]
command=php artisan queue:work --sleep=3 --tries=1 --memory=256 --timeout=3600
process_name=%(program_name)s_%(process_num)02d
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
redirect_stdout=true
numprocs=2
[supervisorctl]
+479 -242
View File
File diff suppressed because it is too large Load Diff